package com.qiangzhi.utils;

import com.qiangzhi.constant.*;
import com.qiangzhi.exception.BaseException;
import org.springframework.web.multipart.MultipartFile;

/**
 * 数据校验工具类
 */
public class ValidateUtil {

    // 文件格式
    private static final String XLS_FORMAT = ".xls";
    private static final String XLSX_FORMAT = ".xlsx";
    private static final String JPG_FORMAT = ".jpg";

    /**
     * 身份证号校验
     *
     * @param card
     */
    public static void validateCard(String card) {
        // 传入的身份证为空字符串或为空就不需要校验
        if (DefaultDataConstant.DEFAULT_EMPTY_STRING.equals(card) || card.isEmpty()) return;

        // 身份证号匹配正则表达式 身份证号分为15位和18位
        if (card.matches(RegexConstant.SHORT_CARD_REGEX) || card.matches(RegexConstant.LONG_CARD_REGEX)) return;

        // 校验不通过抛身份证格式异常
        throw new BaseException(ValidMessageConstant.CARD_FORMAT_ERROR);
    }

    /**
     * 上传的Excel文件校验
     *
     * @param excelFile
     */
    public static void validateExcelFile(MultipartFile excelFile) {
        // 文件为空抛上传文件失败异常
        if (excelFile == null || excelFile.isEmpty()) throw new BaseException(MessageConstant.UPLOAD_FAILED);

        // 文件不以.xls .xlsx结尾 抛文件格式错误异常
        String fileName = excelFile.getOriginalFilename();
        if (!(fileName.endsWith(XLS_FORMAT) || fileName.endsWith(XLSX_FORMAT))) {
            throw new BaseException(MessageConstant.UPLOAD_FORMAT_FAILED);
        }

        // 文件过大抛文件大小超过10MB异常
        long fileSize = excelFile.getSize() / NumberConstant.ONE_BYTE / NumberConstant.ONE_BYTE;
        if (fileSize > NumberConstant.TEN) throw new BaseException(MessageConstant.UPLOAD_SIZE_FAILED);
    }

    /**
     * 上传的头像文件校验
     *
     * @param avatarFile
     */
    public static void validateAvatarFile(MultipartFile avatarFile) {
        // 文件为空表明没有上传头像 不需要再校验
        if (avatarFile == null || avatarFile.isEmpty()) return;

        // 文件不以.jpg结尾 抛文件格式错误异常
        String fileName = avatarFile.getOriginalFilename();
        if (!fileName.endsWith(JPG_FORMAT)) throw new BaseException(MessageConstant.UPLOAD_FORMAT_FAILED);

        // 文件过大抛文件过大异常
        long fileSize = avatarFile.getSize() / NumberConstant.ONE_BYTE / NumberConstant.ONE_BYTE;
        if (fileSize > NumberConstant.TWO) throw new BaseException(MessageConstant.UPLOAD_SIZE_FAILED);
    }

}
